package main

import (
	"fmt"
	"gopkg.in/yaml.v3"
	"log"
	"os"
	"path/filepath"
)

// 定义配置结构体
type Config struct {
	LogPath string    `yaml:"log_path"`
	Pie     PieConfig `yaml:"pie"`
}

type PieConfig struct {
	CacheDir string `yaml:"cache_dir"`
	TTL      int64  `yaml:"ttl"`
}

// 全局配置变量
var AppConfig Config

func Init() {
	// 允许通过环境变量覆盖配置路径
	if envPath := os.Getenv("APP_CONFIG_PATH"); envPath != "" {
		if err := LoadConfig(envPath); err == nil {
			return
		}
		log.Printf("Warning: Failed to load config from APP_CONFIG_PATH (%s), trying default locations", envPath)
	}
	// 2. 尝试从可执行文件同级目录加载
	exeDir, err := getExecutableDir()
	if err != nil {
		log.Fatalf("Failed to get executable directory: %v", err)
	}

	defaultPaths := []string{
		"config.yaml",                        // 当前工作目录
		filepath.Join(exeDir, "config.yaml"), // 可执行文件目录
		"/etc/wx_read/config.yaml",           // 系统标准配置目录
	}

	// 加载配置
	// 3. 按优先级尝试多个默认路径
	for _, path := range defaultPaths {
		if err := LoadConfig(path); err == nil {
			return
		}
	}
}

// getExecutableDir 获取可执行文件所在目录
func getExecutableDir() (string, error) {
	exePath, err := os.Executable()
	if err != nil {
		return "", fmt.Errorf("get executable path failed: %w", err)
	}
	return filepath.Dir(exePath), nil
}

// LoadConfig 加载和解析YAML配置
func LoadConfig(path string) error {
	// 检查文件是否存在
	if _, err := os.Stat(path); os.IsNotExist(err) {
		return fmt.Errorf("config file not found: %s", path)
	}

	// 读取配置文件
	configFile, err := os.ReadFile(path)
	if err != nil {
		return fmt.Errorf("read config file failed: %w", err)
	}

	// 解析YAML
	if err := yaml.Unmarshal(configFile, &AppConfig); err != nil {
		return fmt.Errorf("parse YAML failed: %w", err)
	}

	return nil
}
